﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace StandAlone
{
    public partial class frm_Usuarios_Menu : Form
    {
        public frm_Usuarios_Menu()
        {
            InitializeComponent();
        }

        private void frm_Usuarios_Menu_Load(object sender, EventArgs e)
        {
            Cargar_Usuarios();
        }
        private void Cargar_Usuarios()
        {
            Funciones.Cargar_Combo("SELECT usr AS Nombre FROM Usuarios"
                , "Nombre", ref cmb_Usuarios_Cargados);
        }

        private void cmb_Usuarios_Cargados_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cmb_Usuarios_Cargados.SelectedIndex != -1)
            {
                Verificar_Superadmin();
                CargarEnTextBoxs();
            }
        }

        private void Verificar_Superadmin()
        {
            if (cmb_Usuarios_Cargados.Text.ToString() == "superadmin")
            {
                btn_Privilegios.Enabled = false;
                chkb_Eliminado.Enabled = false;
            }
            else
            {
                btn_Privilegios.Enabled = true;
                chkb_Eliminado.Enabled = true;
            }
        }

        private void CargarEnTextBoxs()
        {
            DataSet ds = new DataSet();
            string Usr = cmb_Usuarios_Cargados.Text.ToString();

            string Consulta = "SELECT Usr as Usr,"
                            + " Email as Email, Direccion as Direccion, Localidad as Localidad,"
                            + " Telefono as Telefono, Celular as Celular,"
                            + " Eliminado as Eliminado"
                            + " FROM Usuarios WHERE Usr = '" + Usr + "'";

            ds = Funciones.Read_DataBase(Consulta);

            txt_Usr.Text = ds.Tables[0].Rows[0]["Usr"].ToString();
            txt_Celular.Text = ds.Tables[0].Rows[0]["Celular"].ToString();
            txt_Direccion.Text = ds.Tables[0].Rows[0]["Direccion"].ToString();
            txt_Telefono.Text = ds.Tables[0].Rows[0]["Telefono"].ToString();
            txt_Email.Text = ds.Tables[0].Rows[0]["Email"].ToString();
            txt_Localidad.Text = ds.Tables[0].Rows[0]["Localidad"].ToString();

            if (ds.Tables[0].Rows[0]["Eliminado"].ToString() == "True")
                chkb_Eliminado.Checked = true;
            else
                chkb_Eliminado.Checked = false;
        }

        private void btn_Cambiar_Pass_Click(object sender, EventArgs e)
        {
            BloquearControlesCambioPass();
            lbl_CambiarPass.Visible = true;
            txt_Pass.Clear();
            txt_Pass.Enabled = true;
            txt_Pass.Select();
        }
        private void BloquearControlesCambioPass()
        {
            cmb_Usuarios_Cargados.Enabled = false;
            chkb_Eliminado.Enabled = false;
            btn_Agregar_Nuevo_Usuario.Visible = false;
            btn_Cambiar_Pass.Visible = false;
            btn_Privilegios.Visible = false;
            txt_Celular.Enabled = false;
            txt_Direccion.Enabled = false;
            txt_Email.Enabled = false;
            txt_Localidad.Enabled = false;
            txt_Telefono.Enabled = false;
            txt_Usr.Enabled = false;
        }
        private void DesbloquearControlesCambioPass()
        {
            cmb_Usuarios_Cargados.Enabled = true;
            chkb_Eliminado.Enabled = true;
            btn_Agregar_Nuevo_Usuario.Visible = true;
            btn_Cambiar_Pass.Visible = true;
            btn_Privilegios.Visible = true;
            txt_Celular.Enabled = true;
            txt_Direccion.Enabled = true;
            txt_Email.Enabled = true;
            txt_Localidad.Enabled = true;
            txt_Telefono.Enabled = true;
            txt_Usr.Enabled = true;
        }
        private void BloquearControlesNuevoUsuario()
        {
            chkb_Eliminado.Checked = false;
            lbl_NuevoUsuario.Visible = true;
            cmb_Usuarios_Cargados.SelectedIndex = -1;
            cmb_Usuarios_Cargados.Enabled = false;
            chkb_Eliminado.Visible = false;
            btn_Agregar_Nuevo_Usuario.Visible = false;
            btn_Privilegios.Visible = false;
            btn_Cambiar_Pass.Visible = false;
            txt_Celular.Clear();
            txt_Direccion.Clear();
            txt_Email.Clear();
            txt_Localidad.Clear();
            txt_Telefono.Clear();
            txt_Usr.ReadOnly = false;
            txt_Usr.Clear();
            txt_Pass.Clear();
            txt_Pass.Enabled = true;
        }
        private void DesbloquearControlesNuevoUsuario()
        {
            lbl_NuevoUsuario.Visible = false;
            cmb_Usuarios_Cargados.Enabled = true;
            chkb_Eliminado.Visible = true;
            btn_Agregar_Nuevo_Usuario.Visible = true;
            btn_Privilegios.Visible = true;
            btn_Cambiar_Pass.Visible = true;
            txt_Celular.Clear();
            txt_Direccion.Clear();
            txt_Email.Clear();
            txt_Localidad.Clear();
            txt_Telefono.Clear();
            txt_Usr.ReadOnly = true;
            txt_Usr.Clear();
            txt_Pass.Clear();
            txt_Pass.Enabled = false;
            txt_Pass.Text = "******************";
            cmb_Usuarios_Cargados.SelectedIndex = 0;
        }

        private void btn_Cancelar_Click(object sender, EventArgs e)
        {
            if (lbl_CambiarPass.Visible == true)
            {
                DesbloquearControlesCambioPass();
                lbl_CambiarPass.Visible = false;
                txt_Pass.Enabled = false;
                txt_Pass.Text = "******************";
            }
            else if (lbl_NuevoUsuario.Visible == true)
            {
                DesbloquearControlesNuevoUsuario();
                lbl_NuevoUsuario.Visible = false;
            }
            else 
            {
                int index = cmb_Usuarios_Cargados.SelectedIndex;
                cmb_Usuarios_Cargados.SelectedIndex = -1;
                cmb_Usuarios_Cargados.SelectedIndex = index;
            }
        }

        private void btn_Guardar_Cambios_Click(object sender, EventArgs e)
        {
            if (lbl_CambiarPass.Visible == true)  ///Cuando se Cambia el password.
            {
                DesbloquearControlesCambioPass();
                lbl_CambiarPass.Visible = false;
                string usuario = cmb_Usuarios_Cargados.Text.ToString();
                string pass = txt_Pass.Text.ToString();
                string Consulta = "UPDATE Usuarios SET Pass = PWDENCRYPT('" + pass + "')"
                + " WHERE Usuarios.Usr = '" + usuario + "' ";
                Funciones.Insert_DataBase(Consulta);
                MessageBox.Show("Contraseña modificada con éxito!", "Modificación de Contraseña", MessageBoxButtons.OK,
                        MessageBoxIcon.Information);
                txt_Pass.Enabled = false;
                txt_Pass.Text = "******************";
            }
            else if (lbl_NuevoUsuario.Visible == true)   ///Cuando se Agrega nuevo usuario
            {
                if (Buscar_Si_Existe_Usuario() == false)
                {
                    if (Validar_Campos() == true)
                    {
                        Agregar_Registro();
                        MessageBox.Show("Usuario Agregado con Éxito", "Agregar Nuevo Usuario", MessageBoxButtons.OK,
                        MessageBoxIcon.Information);
                        DesbloquearControlesNuevoUsuario();
                        lbl_NuevoUsuario.Visible = false;
                        Cargar_Usuarios();
                    }
                    else 
                    {
                        return;
                    }
                }
                else 
                {
                    MessageBox.Show("El nombre de usuario ya existe!", "Error", MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
                    return;
                }
                DesbloquearControlesNuevoUsuario();
                lbl_NuevoUsuario.Visible = false;
            }
            else ///Cuando se modifca usuario existente.
            {
                Actualizar_Registro();
                MessageBox.Show("Usuario Modificado con Éxito." + Environment.NewLine + "Los cambios tendrán efecto después de reiniciar el programa.", "Modificar Usuario", MessageBoxButtons.OK,
                MessageBoxIcon.Information);
                DesbloquearControlesNuevoUsuario();
                Cargar_Usuarios();
            }
        }

        private void btn_Agregar_Nuevo_Usuario_Click(object sender, EventArgs e)
        {
            BloquearControlesNuevoUsuario();
        }

        private bool Buscar_Si_Existe_Usuario()
        {
            DataSet ds = new DataSet();
            ds = Funciones.Read_DataBase("SELECT Count (Usr) AS Cantidad_Usuarios FROM Usuarios"
                        + " WHERE Usuarios.Usr = '" + txt_Usr.Text.ToString().Trim() + "'");
            if (Convert.ToInt32(ds.Tables[0].Rows[0]["Cantidad_Usuarios"].ToString().Trim()) == 0)
                return false;
            else
                return true;
        }
        private bool Validar_Campos()
        {
            if (txt_Usr.Text.Trim() == "")
            {
                MessageBox.Show("No ingresó Nombre de Usuario", "Error", MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
                return false;
            }
            if (txt_Pass.Text.Trim() == "")
            {
                MessageBox.Show("No ingresó Contraseña", "Error", MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
                return false;
            }
            return true;
        }
        private void Agregar_Registro()
        {
            DataSet ds = new DataSet();
            string usr = txt_Usr.Text.ToString().Trim();
            string Dire = txt_Direccion.Text.ToString().Trim();
            string Loc = txt_Localidad.Text.ToString().Trim();
            string Tel = txt_Telefono.Text.ToString().Trim();
            string Cel = txt_Celular.Text.ToString().Trim();
            string Mail = txt_Email.Text.ToString().Trim();
            string Pass = txt_Pass.Text.ToString().Trim();
            int Elim = Convert.ToInt32(chkb_Eliminado.Checked);
            string Consulta = "INSERT INTO Usuarios(Usr, Direccion, Localidad, Telefono, Celular, Email, Eliminado, Pass)"
                    + " SELECT " + "'" + usr + "'" + ", '" + Dire + "'" + " ,'" + Loc + "'" + " ,'" + Tel + "'" + " ,'" + Cel
                    + "'" + " ,'" + Mail + "'" + " , " + Elim +  ", PWDENCRYPT('" + Pass + "')";
            ds = Funciones.Read_DataBase(Consulta);
        }

        private void Actualizar_Registro()
        {
            string Usr = txt_Usr.Text.ToString().Trim();
            string Dire = txt_Direccion.Text.ToString().Trim();
            string Loc = txt_Localidad.Text.ToString().Trim();
            string Tel = txt_Telefono.Text.ToString();
            string Cel = txt_Celular.Text.ToString();
            string Mail = txt_Email.Text.ToString().Trim();
            int Elim = Convert.ToInt32(chkb_Eliminado.Checked);

            string Consulta = "UPDATE Usuarios SET Direccion = " + "'" + Dire + "'" + ", Localidad = " + "'" + Loc + "'" + ", Telefono = " + "'" + Tel + "'" +
                ", Celular = " + "'" + Cel + "'" + ", Email = " + "'" + Mail + "'" + ", Eliminado = " + Elim + " WHERE Usr = " + "'" + Usr + "'";
            Funciones.Insert_DataBase(Consulta);
        }

        private void btn_Privilegios_Click(object sender, EventArgs e)
        {
            frm_Usuarios_Privilegios up = new frm_Usuarios_Privilegios();
            frm_Usuarios_Privilegios.Usr = cmb_Usuarios_Cargados.Text.ToString().Trim();
            up.ShowDialog();
        }

        private void btn_Cerrar_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
